import Vuex from 'vuex'
import defaultState from './state/state'
import mutations from './mutations/mutations'
import getters from './getters/getters'
import actions from './actions/actions'

const isDev = process.env.NODE_ENV === 'development'

export default () => {
  return new Vuex.Store({
    // strict参数是规范代码中不允许在非vuex环境中修改数据，
    // 正式环境中不要使用此参数，这里方便在开发时团队规范代码
    // 规范代码修改数据尽量在mutations中做
    strict: isDev,
    state: defaultState,
    mutations,
    getters,
    actions,
    modules: {
      a: {
        namespaced: true, // 添加命名空间，调用时需要指定命名空间
        state: {
          text: 1
        },
        mutations: {
          updateText (state, text) {
            console.log('a.state: ', state)
            state.text = text
          }
        },
        getters: {
          // 如果要使用全局的state怎么办
          // 第二个参数是getters，所有的getters方法
          // 第三个参数就是全局state
          textPlus (state, getters, rootState) {
            return state.text + rootState.count
          }
        },
        actions: {
          add ({ state, commit, rootState }) {
            // 第一个参数是当前模块(a)中的mutations方法
            commit('updateText', rootState.count) // 如果要调用全局的mutation,用下面的写法
            // commit('updateCount',{num:56789, num3: 333}, {root: true})
          }
        }
      },
      b: {
        state: {
          text: 2
        }
      }
    }
  })
}
